package com.example.module_mvc.controller

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.EditText
import android.widget.ListView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.alibaba.android.arouter.launcher.ARouter
import com.example.lib_base.LogUtils
import com.example.module_mvc.R
import com.example.module_mvc.bean.UserBean
import com.example.module_mvc.model.UserRepository

/**
 * Controller层负责协调View和Model之间的交互，
 * 通常由Activity或Fragment实现。它接收用户的输入，
 * 调用Model层处理数据，并更新View层的显示。
 *
 * 优点:
 *   - 结构清晰，职责划分清晰
 *   - 降低耦合
 *   - 有利于组件重用
 * 缺点：
 *   - 其实我们上述的示例，已经是经过优化的 MVC 结构了，一般来说，Activity / Fragment 会承担 View 和 Controller 两个角色，就会导致 Activity / Fragment 中代码较多
 *   - 增加了代码结构的复杂性
 */
class MVCActivity : AppCompatActivity() {

    private lateinit var userRepository: UserRepository
    private lateinit var adapter:ArrayAdapter<UserBean>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_mvc)
        userRepository = UserRepository()
        setupListView()

        val etUserName = findViewById<EditText>(R.id.etUserName)
        val btnAddUser = findViewById<Button>(R.id.btnAddUser)

        btnAddUser.setOnClickListener {
            val name = etUserName.text.toString()
            if (name.isNotEmpty()) {
                val newUser = UserBean(id = userRepository.getAllUsers().size + 1, name = name)
                // 这里将数据传输给model层处理
                userRepository.addUser(newUser)
                // 通知数据更新
                adapter.notifyDataSetChanged()
                etUserName.setText("")
            }

//            startActivity(Intent(this, MVPActivity::class.java))

//            ARouter.getInstance().build("/app/MainActivity").navigation()

            // router 原理
//            startActivityByClassName(this,"com.scc.architecture.MainActivity")
        }

    }

    private fun setupListView() {
        val lvUsers = findViewById<ListView>(R.id.lvUsers)
        adapter = object : ArrayAdapter<UserBean>(
            this,
            android.R.layout.simple_list_item_1,
            userRepository.getAllUsers()
        ) {
            override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
                val view = super.getView(position, convertView, parent)
                val text = view.findViewById<TextView>(android.R.id.text1)
                text.text = getItem(position)?.name
                return view
            }
        }
        lvUsers.adapter = adapter
    }


    /**
     * 反射方式
     */
    fun startActivityByClassName(context: Context, className:String){
        try {
            val clazz = Class.forName(className)
            val intent = Intent(context,clazz)
            context.startActivity(intent)
        }catch (e:Exception){
            e.printStackTrace()
            LogUtils.logE("页面不存在")
        }
    }

}